#ifndef GY_ATTRIBUTESGROUP_H
#define GY_ATTRIBUTESGROUP_H

#include <QObject>
#include "GY_ContainerTransform.h"
#include "GY_ControlLibrary_global.h"

class GY_CONTROLLIBRARY_EXPORT GY_AttributesGroup : public GY_ContainerTransform
{
    Q_OBJECT
public:
    explicit Q_INVOKABLE GY_AttributesGroup(const QString &guid,QGraphicsItem *parent = nullptr);
    //继承基类
    bool addItem(GY_Object *pItem) override;
    /**
     * @brief removItem 移除组中的图元
     * @param guid 图元的guid
     * @return 是否移除成功
     */
    bool removItem(const QString &guid) override;
    /**
     * @brief removItem 移除图元
     * @param pItem 图元指针
     * @return 是否移除成功
     */
    bool removItem(const GY_Object *pItem) override;

private:
    /**
     * @brief initializationPropertyInfo 初始化属性信息
     */
    void initializationPropertyInfo();
    /**
     * @brief updatePosition 更新位置
     * @param name 属性名称
     * @param value 位置
     * @return 是否更新成功
     */
    bool updatePosition(const QString &name, const QVariant &value);
    /**
     * @brief updateFillAttributes 更新属性来源
     * @param name 属性名称
     * @param value false为自身属性，true为继承父类属性
     * @return 是否更新成功
     */
    bool updateFillAttributes(const QString &name, const QVariant &value);
    /**
     * @brief updateFillStyle 更新填充样式
     * @param name 属性名称
     * @param value false为渐变色，true为纯色
     * @return 是否更新成功
     */
    bool updateFillStyle(const QString &name, const QVariant &value);
    /**
     * @brief updateFillColor 更新填充颜色
     * @param name 属性名称
     * @param value QColor rgb值
     * @return 是否更新成功
     */
    bool updateFillColor(const QString &name, const QVariant &value);
    /**
     * @brief updateFillGradient 更新填充渐变色
     * @param name 属性名称
     * @param value 渐变参数
     * @return 返回更新是否成功
     */
    bool updateFillGradient(const QString &name, const QVariant &value);
    /**
     * @brief updatePattern 更新填充图案
     * @param name 属性名称
     * @param value 填充图案值
     * @return 返回更新是否成功
     */
    bool updatePattern(const QString &name, const QVariant &value);
    /**
     * @brief updateFillOpacity 更新填充透明度
     * @param name 属性名称
     * @param value 透明度qreal值
     * @return 返回更新是否成功
     */
    bool updateFillOpacity(const QString &name, const QVariant &value);
    /**
     * @brief updatePenAttributes 更新属性来源
     * @param name 属性名称
     * @param value false为自身属性，true为继承父类属性
     * @return 是否更新成功
     */
    bool updatePenAttributes(const QString &name, const QVariant &value);
    /**
     * @brief updatePenColor 更新线条颜色
     * @param name 属性名称
     * @param value 颜色
     * @return 返回更新是否成功
     */
    bool updatePenColor(const QString &name, const QVariant &value);
    /**
     * @brief updatePenOpacity 更新线条样式
     * @param name 属性名称
     * @param value 样式值
     * @return 返回更新是否成功
     */
    bool updateLineStyle(const QString &name, const QVariant &value);
    /**
     * @brief updatePenOpacity 更新线条的透明度
     * @param name 属性名称
     * @param value 透明度qreal值
     * @return 返回更新是否成功
     */
    bool updatePenOpacity(const QString &name, const QVariant &value);
    /**
     * @brief updateLineWidth
     * @param name 属性名称
     * @param value
     * @return 返回更新是否成功
     */
    bool updateLineWidth(const QString &name, const QVariant &value);
    /**
     * @brief updateSubclassBrushes 更新子类笔刷
     * @param obj 继承属性对象
     */
    void updateSubclassBrushes(GY_AttributesGroup* obj);

};

#endif // GY_ATTRIBUTESGROUP_H
